/*
 * Superficie.cpp
 *
 *  Created on: 23/10/2013
 *      Author: ezequiel
 */

#include "Superficie.h"

Superficie::Superficie() : Dibujable() {
forma = new Cuadrado();
ancho = 300.0f;
altura = -1.0f;
}

Superficie::~Superficie() {
delete forma;}

void Superficie::render(GLuint handle, glm::mat4* matModelo) {
	this->forma->render(this->handle, matModelo);
}

void Superficie::render(GLuint handle) {
	changeObjectColor(this->handle, 1.0, 1.0,1.0);
	glm::mat4  matrizAuxCuerpo = glm::mat4 (1.0f);
		matrizAuxCuerpo = glm::translate(matrizAuxCuerpo, glm::vec3(0.0f, 0.0f, altura));
//		 matrizAuxCuerpo = glm::rotate(matrizAuxCuerpo, 170.0f, glm::vec3(1.0f, 0.0f, 1.0f));
			matrizAuxCuerpo = glm::scale(matrizAuxCuerpo, glm::vec3(ancho, ancho, 3.5f));
		 this->render(handle, &matrizAuxCuerpo);
}

void Superficie::setNormapMap(int normal) {
	this->forma->setTextureNormalId(normal);
}

void Superficie::changeObjectColor(GLuint handle, float r, float g, float b)
{
    glm::vec3 diffuse_reflectivity = glm::vec3( r, g, b );

    GLuint location_diffuse_reflectivity = glGetUniformLocation( handle, "Kd");
    if( location_diffuse_reflectivity >= 0 )
	{
		glUniform3fv( location_diffuse_reflectivity, 1, &diffuse_reflectivity[0]);
	}

}

void Superficie::setTextureid(GLuint textureid) {
	this->forma->setTextureid(textureid);
}

void Superficie::mover(GLuint handle) {
	glm::mat4  matrizAuxCuerpo = glm::mat4 (1.0f);
		matrizAuxCuerpo = glm::translate(matrizAuxCuerpo, glm::vec3(0.0f, 0.0f, altura));
//		 matrizAuxCuerpo = glm::rotate(matrizAuxCuerpo, 170.0f, glm::vec3(1.0f, 0.0f, 1.0f));
			matrizAuxCuerpo = glm::scale(matrizAuxCuerpo, glm::vec3(ancho, ancho, 3.5f));
		 this->render(handle, &matrizAuxCuerpo);
}

void Superficie::setCam(Camara* cam, glm::mat4 pr) {
	this->forma->setCam(cam, pr);
}
